class Request {
  constructor(options = {}) {
    // 请求的根路径
    this.baseUrl = options.baseUrl || '';
    // 请求的 url 地址
    this.url = options.url || '';
    // 请求方式
    this.method = 'GET';
    // 请求的参数对象
    this.data = null;
    // header 请求头
    this.header = options.header || {};
    this.beforeRequest = null;
    this.afterRequest = null;
  }

  get (url, data = {}) {
    this.method = 'GET';
    this.url = this.baseUrl + url;
    this.data = data;
    return this._();
  }

  post (url, data = {}) {
    this.method = 'POST';
    this.url = this.baseUrl + url;
    this.data = data;
    return this._();
  }

  put (url, data = {}) {
    this.method = 'PUT';
    this.url = this.baseUrl + url;
    this.data = data;
    return this._();
  }

  delete (url, data = {}) {
    this.method = 'DELETE';
    this.url = this.baseUrl + url;
    this.data = data;
    return this._();
  }

  _ () {
    // 清空 header 对象
    this.header = {};
    // 请求之前做一些事
    this.beforeRequest && typeof this.beforeRequest === 'function' && this.beforeRequest(this);
    // 发起请求
    return new Promise((resolve, reject) => {
      let weixin = wx;
      // 适配 uniapp
      if ('undefined' !== typeof uni) {
        weixin = uni;
      }
      weixin.request({
        url: this.url,
        method: this.method,
        data: this.data,
        header: this.header,
        success: (res) => { resolve(res); },
        fail: (err) => { reject(err); },
        complete: (res) => {
          // 请求完成以后做一些事情
          this.afterRequest && typeof this.afterRequest === 'function' && this.afterRequest(res);
        }
      });
    });
  }
}

export const $http = new Request();